package cn.bonoon.kernel.web.annotations.components;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * <pre>
 * 下拉列表控件；可以使用{@link cn.bonoon.kernel.web.annotations.AutoDataLoader AutoDataLoader}来自动加载数据
 * 
 * 如果使用了自动加载数据，则<code>value</code>属性不需要指定值，该值无效
 * 
 * 如果需要支持多选，可以通过{@link ComboMultipleChecker}注解来指定；默认的情况下
 * 如果被注解的该字段为数组，则认为是支持多先，否则是单选
 * 
 * 如果使用{@link cn.bonoon.kernel.web.annotations.AutoDataLoader AutoDataLoader}来生成自动加载数据的情况，
 * 默认情况下是使用{@link cn.bonoon.kernel.support.models.Item Item}
 * 如果需要自己重新指定实体，需要使用{@link cn.bonoon.kernel.web.annotations.AutoDataResultClass AutoDataResultClass}来定义返回的结果集
 * 使用{@link cn.bonoon.kernel.web.annotations.AutoDataResultClass#selectField() AutoDataResultClass.selectField()}，可以重写定义Item
 * 的内容格式，如：对显示的名称加前缀或后缀，如果是自定义的结果集，也应该自定义数据的读取方式，
 * 即定义selectField字段，并且通过自定义的结果对象的构造函数进行赋值
 * </pre>
 * @author jackson
 *
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface AsComboBox {

	/**
	 * <pre>
	 * url
	 * 如果指定了{@link cn.bonoon.kernel.web.annotations.AutoDataLoader AutoDataLoader}则该值无效
	 * <hr/>
	 * 如果是自己指定的URL则需要自己指定项目名，即：{@link javax.servlet.ServletContext#getContextPath() ServletContext.getContextPath()}
	 * 因为自动生成的处理器的路径是会自己加上{@link javax.servlet.ServletContext#getContextPath() ServletContext.getContextPath()}信息的
	 * </pre>
	 * @return
	 */
	String value() default "";
	
	String valueField() default "id";
	
	String textField() default "text";
	
	OnReload[] reload() default {};
}
